<?php

$tx_ready = true;

/**
 * 트랜잭션 시작한다.
 *
 * @global boolean $tx_ready 트랜잭션 진행 여부
 * @global object $wpdb wp DB 클래스
 * @return boolean 트랜잭션 시작 여부
 */
function tx_begin() {
    global $wpdb, $tx_ready;
    if ($tx_ready == true) {
        $wpdb->query("START TRANSACTION;");
        $tx_ready = false;
        return true;
    } else {
        // already in a transaction, or invalid tx_id
        return false;
    }
}

/**
 * 트랜잭션 커밋한다.
 *
 * @global boolean $tx_ready 트랜잭션 진핸 여부
 * @global object $wpdb wp DB 클래스
 * @return boolean 트랜잭션 시작 여부
 */
function tx_commit() {
    global $wpdb, $tx_ready;
    if ($tx_ready == false) {
        $wpdb->query("COMMIT;");
        $tx_ready = true;
        return true;
    } else {
        // still in a transaction, or invalid tx_id
        return false;
    }
}

/**
 * 트랜잭션 롤백하면서 에러 메세지 띄우고 die.
 *
 * @global object $wpdb
 * @global boolean $tx_ready
 * @param string $message 메세지
 * @param string $title 제목
 * @param array $args 인자
 */
function tx_rollback($message, $title = '', $args = array()) {
    global $wpdb, $tx_ready;
    if ($tx_ready == false) {
        $tx_ready = true;
        $wpdb->query("ROLLBACK;");
    }
    // die no matter what, to highlight the workflow error
    wp_die($message, $title, $args);
}

?>